package org.com.structuralPattern.decoratorPattern;

/**
 * @author Jonny
 * @version 1.0
 * @Description:
 * @date 2021/4/14 18:17
 */

/**
 *
 * ■ 装饰类和被装饰类可以独立发展，而不会相互耦合。即 Component 类无须知道Decorator类，
 * Decorator类是从外部来扩展Component类的功能，而Decorator也不用知道具体的构件。
 * ■ 装饰模式是继承关系的一个替代方案。装饰类Decorator，不管装饰多少层，返回的对象还是Component。
 * ■ 装饰模式可以动态地扩展一个实现类的功能。
 *
 *
 * 使用装饰模式的典型场景如下所示。
 * ■ 需要扩展一个类的功能，或给一个类增加附加功能。
 * ■ 需要动态地给一个对象增加功能，这些功能可以再动态地撤销。
 * ■ 需要为一批类进行改装或加装功能。装饰模式是对继承的有力补充。单纯使用继承时，
 * 在一些情况下就会增加很多子类，而且灵活性差，维护也不容易。装饰模式可以替代继承，
 * 解决类膨胀的问题，如Java基础类库中的输入输出流相关的类大量使用了装饰模式。
 *
 */
public class ConcreteCarDecorator extends CarDecorator {

    public ConcreteCarDecorator(Car car) {
        super(car);
    }

    private void print(){
        System.out.println("增加天窗，颜色更改成紫色雷光");
    }

    private void setGPS(){
        System.out.println("加装GPS定位");
    }

    public void Show(){
        super.Show();
        this.print();
        this.setGPS();
    }

}
